var gulp = require("gulp"),
    sass = require("gulp-sass");  //引入所需要的插件

var FileAsset = {sass:"./scss/sass1.scss",js:"./js/*.js"};  //文件变量


/*###############定义简单的任务：执行sass任务#####################*/
gulp.task('gulpSassTest', function () { //定义任务
    return gulp.src(FileAsset.sass) // src里面的可以是字符串，也可以是字符串数组。表示目标文件
        .pipe(sass()) // 将目标文件通过管道，作为sass插件的输入
        .on( 'error', function(e){ //执行出错的处理
            console.log("############ runing sass() has error #################");
            console.log("############# error Start ###############");
            console.log(e); //打印错误内容
            console.log("############# error end ##############");
        })
        .pipe(gulp.dest('./css')) // desc里面可以是字符串，也可以是函数，字符串的话输出sass处理后的文件，函数表示如何处理sass的输入，并返回相应的路径
        .on("end",endFunc);  //在结束的时候执行某个函数
});
//定义endFunc函数
function endFunc() {
    console.log("########## this is in endFunc ############");
}
/*###############################################################################*/


/*#######################
* 监听：gulp.watch(glob[,opts],tasks):
* glob:字符串或者字符串数组，表示监听哪些文件发生了变动， tasks: 数组形式，表示监听的文件发生变动之后，要执行的一个或多个任务
* ##########################*/

gulp.task("watch",["gulpSassTest"],function () {
    var watcher =gulp.watch(FileAsset.sass,["gulpSassTest"]);  //定义放在task的function里面，表示启动 watch 任务才开始监听； 
                                                        //定义在function外面的话，无论启动任何任务都不会自动结束，会监听变化。
    watcher.on("changed",function (event) {  //event.path:表示触发该时间的文件路径； event.type:表示类型：added, changed, deleted
        console.log("######## watcher has change #########");
        console.log("###file: "+event.path+" was "+event.type+"");
    });
    watcher;
});


/*###############################################################################*/



/*###############第二个test:任务顺序指定############################*/
gulp.task("oneTask",function () {//定义任务:通常来说，它会是这种形式：gulp.src().pipe(someplugin())
    console.log("##### before task ######");
});

gulp.task("twoTask",["oneTask"],function () {  //oneTask, 再执行twoTask：  如果数组里面是多个，它们是并行的。
   console.log("####### after task #######");
});
/*###############################################################################*/



/*#############第三个test:
* 如果想严格的要求执行顺序，如下面两个task： first、second, 想要先执行first,再执行second：
* 使用插件gulp-sequence （推荐使用）  通过cnpm install gulp-sequence --save-dev
* #######################*/
var gulpSequence  = require('gulp-sequence');
gulp.task("three",function () {
    console.log("####### first task #######");
});
gulp.task("four",function () {
    console.log("####### second task #######");
});
gulp.task("orderTest2",function (cb) {
    gulpSequence("three","four",cb);  // runSequence('zero', ['one', 'two', 'three'], 'four', cb);  其中one two three是并行的，没有先后顺序
});
/*###############################################################################*/



